import {execSync} from 'child_process'


const scopes = [
  'feat', // 新功能(feature)
  'fix', // 修补bug
  'docs', // 文档(documentation)
  'style', // 格式、样式(不影响代码运行的变动)
  'refactor', // 重构(即不是新增功能，也不是修改BUG的代码)
  'perf', // 优化相关，比如提升性能、体验
  'test', // 添加测试
  'build', // 构建相关
  'ci', // 持续集成修改
  'chore', // 构建过程或辅助工具的变动
  'revert', // 回滚到上一个版本
  'workflow', // 工作流改进
  'mod', // 不确定分类的修改
  'wip', // 开发中
  'types', // 类型修改
  'release' // 版本发布
]

const gitStatus = execSync('git status --porcelain || true')
  .toString()
  .trim()
  .split('\n')

const scopeComplete = gitStatus
  .find((r) => ~r.indexOf('M  packages'))
  ?.replace(/\//g, '%%')
  ?.match(/packages%%((\w|-)*)/)?.[1]

export default {
  extends: ['@commitlint/config-conventional'],
  rules: {
    /**
     * type[scope]: [function] description
     *
     * ^^^^^^^^^^^^^^ empty line.
     * - Something here
     */
    'body-leading-blank': [1, 'always'],
    /**
     * type[scope]: [function] description
     *
     * - something here
     *
     * ^^^^^^^^^^^^^^
     */
    'footer-leading-blank': [1, 'always'],
    /**
     * type[scope]: [function] description [No more than 72 characters]
     *      ^^^^^
     */
    'header-max-length': [2, 'always', 72],
    'scope-case': [2, 'always', 'lower-case'],
    'subject-case': [
      1,
      'never',
      ['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
    ],
    'subject-empty': [2, 'never'],
    'subject-full-stop': [2, 'never', '.'],
    'type-case': [2, 'always', 'lower-case'],
    'type-empty': [2, 'never'],
    /**
     * type[scope]: [function] description
     * ^^^^
     */
    'type-enum': [2, 'always', scopes],
  },
  prompt: {
    defaultScope: scopeComplete,
    customScopesAlign: !scopeComplete ? 'top' : 'bottom',
    allowCustomIssuePrefixs: false,
    allowEmptyIssuePrefixs: false,
  },
};
